home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / c / ww_tv.exe / EDITS.ASM < prev    next >
Assembly Source File  |  1992-08-21  |  8KB  |  297 lines

  1. ;/*------------------------------------------------------------*/
  2. ;/* filename -       edits.asm                                 */
  3. ;/*                                                            */
  4. ;/* function(s)                                                */
  5. ;/*                  TEditor member functions                  */
  6. ;/*------------------------------------------------------------*/
  7.  
  8. ;/*------------------------------------------------------------*/
  9. ;/*                                                            */
  10. ;/*    Turbo Vision -  Version 1.0                             */
  11. ;/*                                                            */
  12. ;/*                                                            */
  13. ;/*    Copyright (c) 1991 by Borland International             */
  14. ;/*    All Rights Reserved.                                    */
  15. ;/*                                                            */
  16. ;/*------------------------------------------------------------*/
  17.  
  18. ; Primatech Modifications History:
  19.  
  20. ;** JAH 11-12-91 Check for soft-return, allow variable-size tabs
  21. ;** JLS 01-02-92 Added CLD at end of lineStart function as in BC++ 3.0
  22. ;** JLS 08-20-92 Allow user to set character displayed for hard return
  23.  
  24.  
  25.         IDEAL
  26.         MODEL LARGE, PROLOG
  27.  
  28.         INCLUDE "TVWRITE.INC"
  29.  
  30.         PUBLIC @TEditor@bufChar$xqus
  31.         PUBLIC @TEditor@bufPtr$xqus
  32.         PUBLIC @TEditor@formatLine$qnvusius
  33.         PUBLIC @TEditor@lineEnd$qus
  34.         PUBLIC @TEditor@lineStart$qus
  35.         PUBLIC @TEditor@nextChar$qus
  36.         PUBLIC @TEditor@prevChar$qus
  37.  
  38. CODESEG
  39.  
  40.  
  41. ;char TEditor::bufChar( ushort P ) const
  42. PROC    @TEditor@bufChar$xqus
  43.  
  44.         ARG   thisPtr:FAR PTR, P:WORD
  45.         USES  DI
  46.  
  47.         LES   DI,[thisPtr]
  48.         MOV   BX,[P]
  49.         CMP   BX,[ES:DI+TEditorCurPtr]
  50.         JB    @@1
  51.         ADD   BX,[ES:DI+TEditorGapLen]
  52. @@1:    LES   DI,[ES:DI+TEditorBuffer]
  53.         MOV   AL,[ES:DI+BX]
  54.         RET
  55. ENDP
  56.  
  57.  
  58. ;function TEditor::bufPtr( ushort P ) const
  59. PROC    @TEditor@bufPtr$xqus
  60.  
  61.         ARG   thisPtr:FAR PTR, P:WORD
  62.         USES  DI
  63.  
  64.         LES   DI,[thisPtr]
  65.         MOV   AX,[P]
  66.         CMP   AX,[ES:DI+TEditorCurPtr]
  67.         JB    @@1
  68.         ADD   AX,[ES:DI+TEditorGapLen]
  69. @@1:    RET
  70. ENDP
  71.  
  72.  
  73. ;void TEditor::formatLine( void *DrawBuf,
  74. ;                          ushort LinePtr,
  75. ;                          int Wide,
  76. ;                          ushort Colors
  77. ;                        )
  78. PROC    @TEditor@formatLine$qnvusius
  79.  
  80.         ARG   thisPtr:FAR PTR, DrawBuf:FAR PTR, LinePtr:WORD, Wide:WORD, Colors:WORD
  81.         USES  DS,SI,DI
  82.         LOCAL TabSize:BYTE, Count:BYTE, RetChar:BYTE
  83.  
  84.         LDS   BX,[thisPtr]
  85.         LES   DI,[DrawBuf]
  86.         MOV   SI,[LinePtr]
  87.         MOV   AL,[DS:BX+TEditorTabSize]
  88.         MOV   [TabSize],AL
  89.         MOV   AL,[DS:BX+TEditorRetChar]
  90.         MOV   [RetChar],AL
  91.         XOR   DX,DX
  92.         CLD
  93.         MOV   AH,[BYTE PTR Colors]
  94.         MOV   CX,[DS:BX+TEditorSelStart]
  95.         CALL  @@10
  96.         MOV   AH,[BYTE PTR Colors+1]
  97.         MOV   CX,[DS:BX+TEditorCurPtr]
  98.         CALL  @@10
  99.         ADD   SI,[DS:BX+TEditorGapLen]
  100.         MOV   CX,[DS:BX+TEditorSelEnd]
  101.         ADD   CX,[DS:BX+TEditorGapLen]
  102.         CALL  @@10
  103.         MOV   AH,[BYTE PTR Colors]
  104.         MOV   CX,[DS:BX+TEditorBufSize]
  105.         CALL  @@10
  106.         JMP   @@31
  107. @@10:   SUB   CX,SI
  108.         JA    @@11
  109.         RETN
  110. @@11:   LDS   BX,[DS:BX+TEditorBuffer]
  111.         ADD   SI,BX
  112.         MOV   BX,[Wide]
  113. @@12:   LODSB
  114.         CMP   AL,' '
  115.         JB    @@20
  116. @@13:   STOSW
  117.         INC   DX
  118. @@14:   CMP   DX,BX
  119.         JAE   @@30
  120.         LOOP  @@12
  121.         LDS   BX,[thisPtr]
  122.         SUB   SI,[WORD PTR DS:BX+TEditorBuffer]
  123.         RETN
  124. @@20:   CMP   AL,0Dh
  125.         JE    @@29        ;@@30
  126.         CMP   AL,09h
  127.         JNE   @@13
  128.         PUSH  AX
  129.         MOV   AX,DX
  130.         DIV   [TabSize]         ;AH=remainder, AL=quotient
  131.         MOV   AL,[TabSize]
  132.         SUB   AL,AH             ;compute spaces to next tab stop
  133.         MOV   [Count],AL
  134.         POP   AX
  135.         MOV   AL,' '            ;put spaces in output buffer
  136. @@21:   STOSW
  137.         INC   DX
  138.         CMP   DX,BX
  139.         JAE   @@30
  140.         DEC   [Count]
  141.         JNZ   @@21
  142.         JMP   @@14
  143. @@29:   JCXZ  @@30              ;
  144.         LODSB                   ;
  145.         CMP   AL,0Ah            ;have CR, check for hard-return (CR+LF)
  146.         JNE   @@30              ;
  147.         MOV   AL,[RetChar]      ;
  148.         CMP   AL,' '            ;check for space
  149.         JE    @@30              ;don't store if it's a space
  150.         STOSW                   ;
  151.         INC   DX                ;
  152. @@30:   POP   CX
  153. @@31:   MOV   AL,' '
  154.         MOV   CX,[Wide]
  155.         SUB   CX,DX
  156.         JBE   @@32
  157.         REP   STOSW
  158. @@32:   RET
  159. ENDP
  160.  
  161.  
  162. ;function TEditor.lineEnd(P: Word): Word; assembler;
  163. PROC    @TEditor@lineEnd$qus
  164.  
  165.         ARG   thisPtr:FAR PTR, P:WORD
  166.         USES  DS,SI,DI
  167.  
  168.         LDS   SI,[thisPtr]
  169.         LES   BX,[DS:SI+TEditorBuffer]
  170.         MOV   DI,[P]
  171.         MOV   AL,0Dh
  172.         CLD
  173.         MOV   CX,[DS:SI+TEditorCurPtr]
  174.         SUB   CX,DI
  175.         JBE   @@1
  176.         ADD   DI,BX
  177.         REPNE SCASB
  178.         JE    @@2
  179.         MOV   DI,[DS:SI+TEditorCurPtr]
  180. @@1:    MOV   CX,[DS:SI+TEditorBufLen]
  181.         SUB   CX,DI
  182.         JCXZ  @@4
  183.         ADD   BX,[DS:SI+TEditorGapLen]
  184.         ADD   DI,BX
  185.         REPNE SCASB
  186.         JNE   @@3
  187. @@2:    DEC   DI
  188. @@3:    SUB   DI,BX
  189. @@4:    MOV   AX,DI
  190.         RET
  191. ENDP
  192.  
  193.  
  194. ;function TEditor.lineStart(P: Word): Word; assembler;
  195. PROC    @TEditor@lineStart$qus
  196.  
  197.         ARG   thisPtr:FAR PTR, P:WORD
  198.         USES  DS,SI,DI
  199.  
  200.         LDS   SI,[thisPtr]
  201.         LES   BX,[DS:SI+TEditorBuffer]
  202.         MOV   DI,[P]
  203.         MOV   AL,0Dh
  204.         STD
  205.         MOV   CX,DI
  206.         SUB   CX,[DS:SI+TEditorCurPtr]
  207.         JBE   @@1
  208.         ADD   BX,[DS:SI+TEditorGapLen]
  209.         ADD   DI,BX
  210.         DEC   DI
  211.         REPNE SCASB
  212.         JE    @@2
  213.         SUB   BX,[DS:SI+TEditorGapLen]
  214.         MOV   DI,[DS:SI+TEditorCurPtr]
  215. @@1:    MOV   CX,DI
  216.         JCXZ  @@4
  217.         ADD   DI,BX
  218.         DEC   DI
  219.         REPNE SCASB
  220.         JNE   @@3
  221. @@2:    INC   DI
  222.         INC   DI
  223.         SUB   DI,BX
  224.         CMP   DI,[DS:SI+TEditorCurPtr]
  225.         JE    @@4
  226.         CMP   DI,[DS:SI+TEditorBufLen]
  227.         JE    @@4
  228.         CMP   [BYTE PTR ES:BX+DI],0Ah
  229.         JNE   @@4
  230.         INC   DI
  231.         JMP   @@4
  232. @@3:    XOR   DI,DI
  233. @@4:    MOV   AX,DI
  234.         CLD
  235.         RET
  236. ENDP
  237.  
  238.  
  239. ;function TEditor.nextChar(P: Word): Word; assembler;
  240. PROC    @TEditor@nextChar$qus
  241.  
  242.         ARG   thisPtr:FAR PTR, P:WORD
  243.         USES  DS,SI,DI
  244.  
  245.         LDS   SI,[thisPtr]
  246.         MOV   DI,[P]
  247.         CMP   DI,[DS:SI+TEditorBufLen]
  248.         JE    @@Done
  249.         INC   DI
  250.         CMP   DI,[DS:SI+TEditorBufLen]
  251.         JE    @@Done
  252.         LES   BX,[DS:SI+TEditorBuffer]
  253.         CMP   DI,[DS:SI+TEditorCurPtr]
  254.         JB    @@1
  255.         ADD   BX,[DS:SI+TEditorGapLen]
  256. @@1:    MOV   AX,[ES:BX+DI-1]
  257.         CMP   AX,0A0Dh
  258.         JE    @@Skip
  259.         CMP   AH,0Dh                    ;check for soft-return
  260.         JNE   @@Done
  261.         CMP   [BYTE PTR ES:BX+DI+1],0Ah
  262.         JE    @@Done
  263. @@Skip: INC   DI
  264. @@Done: MOV   AX,DI
  265.         RET
  266. ENDP
  267.  
  268.  
  269. ;function TEditor.prevChar(P: Word): Word; assembler;
  270. PROC    @TEditor@prevChar$qus
  271.  
  272.         ARG   thisPtr:FAR PTR, P:WORD
  273.         USES  DS,SI,DI
  274.  
  275.         LDS   SI,[thisPtr]
  276.         MOV   DI,[P]
  277.         OR    DI,DI
  278.         JE    @@Done
  279.         DEC   DI
  280.         JE    @@Done
  281.         LES   BX,[DS:SI+TEditorBuffer]
  282.         CMP   DI,[DS:SI+TEditorCurPtr]
  283.         JB    @@1
  284.         ADD   BX,[DS:SI+TEditorGapLen]
  285. @@1:    MOV   AX,[ES:BX+DI-1]
  286.         CMP   AX,0A0Dh
  287.         JE    @@Skip
  288.         CMP   AH,0Dh                    ;check for soft-return
  289.         JNE   @@Done
  290. @@Skip: DEC   DI
  291. @@Done: MOV   AX,DI
  292.         RET
  293. ENDP
  294.  
  295. END
  296.  
  297.